/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.tri.gui.ListadosWorkers;

import java.util.Date;
import javax.swing.table.AbstractTableModel;
import org.tri.entity.AbstractVenta;
import org.tri.entity.Establecimiento;
import org.tri.entity.Productor;
import org.tri.gui.worker.TableFillListener;
import org.tri.gui.worker.TableFillWorker;
import org.tri.gui.worker.retrievers.MultipleBusquedaDataRetriever;
import org.tri.model.EntityTableModel;
import org.tri.persistence.search.BusquedaVenta;
import org.tri.persistence.search.BusquedaVentaHistorica;

/**
 *
 * @author giaco
 */
public class VentasListadosWorker extends AbstractListadosWorker{
    
    public VentasListadosWorker(){
        //inicializamos el modelo de tabla
        modelo = new EntityTableModel(AbstractVenta.class,
                                      new String[] {"Fecha", "Nro DTA", "Destinatario", "RENSPA", 
                                                    "Categoria", "Establecimiento", "Cantidad de Animales"},
                                      new String[] {"fecha", "nroDta", "destinatario", "renspaDestinatario", 
                                                    "categoria", "establecimiento", "cantidadAnimales"});
        
        
    }//end constructor VentasListadosWorker
    
    
    @Override
    public AbstractTableModel execute( Establecimiento establecimiento,
                                       Date fechaInicio, Date fechaFin,
                                       TableFillListener listener ) {
        //inicializo la busqueda
        BusquedaVenta venta = new BusquedaVenta();
        BusquedaVentaHistorica ventaHistorica = new BusquedaVentaHistorica();
        
        //agrego los criterios de busqueda
        venta.porFechaEnRango( fechaInicio, fechaFin );
        ventaHistorica.porFechaEnRango(fechaInicio, fechaFin);
        venta.porEstablecimiento(establecimiento);
        ventaHistorica.porEstablecimiento(establecimiento);
        
        //agrego las busquedas al data retriever
        MultipleBusquedaDataRetriever busqueda = new MultipleBusquedaDataRetriever( venta , ventaHistorica );
        
        //realizo la busqueda en un Thread aparte
        TableFillWorker<AbstractVenta> worker = new TableFillWorker<AbstractVenta>( (EntityTableModel) modelo , busqueda );
        
        worker.addTableFillListener( listener );
        
        worker.execute();
        
        return modelo;
        
    }//end metodo execute
    
    @Override
    public AbstractTableModel execute( Productor productor, Date fechaInicio,
                                       Date fechaFin,
                                       TableFillListener listener ) {
        //inicializo la busqueda
        BusquedaVenta venta = new BusquedaVenta();
        BusquedaVentaHistorica ventaHistorica = new BusquedaVentaHistorica();
        
        //agrego los criterios de busqueda
        venta.porFechaEnRango( fechaInicio, fechaFin );
        ventaHistorica.porFechaEnRango(fechaInicio, fechaFin);
        venta.porProductor(productor);
        ventaHistorica.porProductor(productor);
        
        //agrego las busquedas al data retriever
        MultipleBusquedaDataRetriever busqueda = new MultipleBusquedaDataRetriever( venta , ventaHistorica );
        
        //realizo la busqueda en un Thread aparte
        TableFillWorker<AbstractVenta> worker = new TableFillWorker<AbstractVenta>( (EntityTableModel) modelo , busqueda );
        
        worker.addTableFillListener( listener );
        
        worker.execute();
        
        return modelo;
        
    }//end metodo execute

    @Override
    public String toString(){
        return "Ventas";
    }
    
}
